#include "http.hpp"
static int number = 0;
void Login(httprequest& re, httpresponse& res)
{
    string pw, username;
    if (re.get_methond() == "GET")
    {
        string arg = re.get_arg();
        // 获取密码：
        int pos = arg.rfind('=');
        pw = arg.substr(pos + 1);
        // 获取用户名：
        int pos1 = arg.rfind('=', pos - 1);
        int pos2 = arg.rfind('&', pos - 1);
        username = arg.substr(pos1 + 1, pos2 - pos1 - 1);
    }
    else if (re.get_methond() == "POST")
    {
        // post 方式：正文：username=1111&password=666
        string text = re.get_posttext();
        // 获取密码：
        int pos = text.rfind('=');
        pw = text.substr(pos + 1);
        // 获取用户名：
        int pos1 = text.rfind('=', pos - 1);
        int pos2 = text.rfind('&', pos - 1);
        username = text.substr(pos1 + 1, pos2 - pos1 - 1);
    }
    // 1·验证cookie是否存在：
    // if (re.get_password() == "666")
    // { // 存在直接让它访问（无需验证密码）
    //     res.set_route("./wwwroot/video.html");
    //     goto again;
    // }
    // if (pw == "666")
    // { // 密码正确，cookie不存在，第一次添加cookie：

    //     res.set_cookie_username(username);
    //     res.set_cookie_password(pw);
    //     res.set_route("./wwwroot/video.html");
    // }
    // else
    // {
    //     res.set_route("./wwwroot/404.html");
    // }
    // 2·验证session是否存在(也就是cookie——session共同使用)：

    if (!re.get_password().empty())
    {
        // 非第一次套用session：
        session_ptr sn = ursm->get_session(re.get_password());
        // cookie没有过期
        if (sn && sn->_terminatal_time > time(nullptr))
        {
            use_log(loglevel::DEBUG) << sn->_username << " --- " << sn->_status;
            res.set_route("./wwwroot/video.html");
            goto again;
        }

        else
        { // 可能服务器程序关闭了，此时浏览器还保存了对应的之前的cookie-sessionid，这样下次如果服务器访问就会找不到：
            use_log(loglevel::DEBUG) << "用户的cookie已经过期, 需要清理！";
            res.set_route("./wwwroot/404.html");
        }
    }
    else
    {
        // 第一次建立session：
        if (pw == "666")
        {
            string user = "user-" + std::to_string(number++);
            session_ptr sn = make_shared<session>(user, "login");
            string sessionid = ursm->add_session(sn);
            res.set_cookie_session(sessionid);

            use_log(loglevel::DEBUG) << sn->_username << " 的cookie-session成功被添加,id是：" << sessionid;
            res.set_route("./wwwroot/video.html");
        }
        else
        {
            res.set_route("./wwwroot/404.html");
        }
    }

again:
    1;
}
int main(int argc, char* argv[])
{

    if (argc != 2)
    {
        std::cerr << "please use: " << argv[0] << " port" << std::endl;
        return 1;
    }
    unique_ptr<http> ut = make_unique<http>(stoi(argv[1]));
    ut->add_route("login", Login);
    ut->start();
}

